home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / util / conv / CarriageRet.lha / CarriageRet / AmigavisionsLib / OpenData.a < prev    next >
Text File  |  1999-01-03  |  3KB  |  154 lines

  1. ********************************************************************************
  2. *
  3. *    Program:    Open Data
  4. *    Filename:    OpenData.a
  5. *
  6. *    Contents:    Ein angegebenes File (a0.l Zeiger auf Filename) wird
  7. *            geladen. Dazu wird zuerst das File untersucht, und
  8. *            der benötigte Speicher zum laden belegt (PUBLIC).
  9. *            Nach dem Laden werden die Startadresse des Files in
  10. *            a0.l, die Länge des belegten Speichers in d1.l und
  11. *            der Returncode in d0.l (0=OK) zurückgegeben.
  12. *
  13. *    Language:    68000 Assembler
  14. *
  15. *    Author:        Johannes R. Geiss
  16. *
  17. *    Copyright:    Amigavisions
  18. *
  19. *    History:    $HISTORY:
  20. *            1.4 (28-Oct-91) bug fixed JRG
  21. *            1.3 (26-Oct-91) changed JRG
  22. *            1.2 (14-Oct-91) changed JRG
  23. *            1.1 (10-Oct-91) changed JRG
  24. *            1.0 (03-Sep-91) written JRG
  25. *
  26. *    Version:    $VER: OpenData.a 1.4 (28-Oct-91)
  27. *
  28. ********************************************************************************
  29.  
  30.  
  31. *------ Includes
  32.     include 'xref.i'
  33.     include 'call.i'
  34.     include 'exec/types.i'
  35.     include 'libraries/dos.i'
  36.     include 'exec/memory.i'
  37.  
  38.  
  39. *------ Imports
  40.     XLIB    Lock
  41.     XLIB    UnLock
  42.     XLIB    Examine
  43.     XLIB    Open
  44.     XLIB    Close
  45.     XLIB    Read
  46.     XLIB    IoErr
  47.     XLIB    AllocMem
  48.     XLIB    FreeMem
  49.     xref    _DOSBase
  50.     xref    _SysBase
  51.  
  52.  
  53. *------ Exports
  54.     xdef    OpenData
  55.  
  56.  
  57. ********************************************************************************
  58.  
  59.     SECTION OpenData
  60.  
  61. *------ OpenData procedure
  62. *
  63. * Input: a0.l Zeiger auf Filename
  64. *
  65. * Output: a0.l Adresse des Speichers
  66. *      d1.l Länge des belegten Speichers (=Filelänge)
  67. *      d0.l Returncode (0=OK)
  68.  
  69. OpenData
  70.     movem.l d2-d3/d5-d7/a3-a6,-(a7)
  71.     movea.l a0,a5            ; Filename merken
  72.  
  73.     move.l    a0,d1            ; Lock eröffnen
  74.     moveq.l #ACCESS_READ,d2
  75.     CALLDOS Lock
  76.     movea.l d0,a3
  77.     tst.l    d0
  78.     bne.s    LockOK
  79. ErExit    move.l    #ERROR_OBJECT_NOT_FOUND,d0
  80. Out    movem.l (a7)+,d2-d3/d5-d7/a3-a6
  81.     rts
  82.  
  83. LockOK    move.l    a3,d1            ; Lock untersuchen
  84.     move.l    #MyLockInfo,d2
  85.     CALLSYS Examine
  86.     tst.l    d0
  87.     bne.s    ExamOK
  88.     bsr    UnLck
  89.     bra.s    ErExit
  90.  
  91. ExamOK    movea.l #MyLockInfo,a1        ; allocate memory
  92.     move.l    fib_Size(a1),d7
  93.     bne.s    fileOK
  94.     bsr    UnLck
  95.     move.l    #ERROR_OBJECT_WRONG_TYPE,d0
  96.     bra.s    Out
  97. fileOK    moveq.l #MEMF_PUBLIC,d1
  98.     move.l    d7,d0
  99.     CALLEXE AllocMem
  100.     movea.l d0,a4
  101.     tst.l    d0
  102.     bne.s    MemOK
  103.     bsr.s    UnLck
  104.     moveq.l #ERROR_NO_FREE_STORE,d0
  105.     bra.s    Out
  106.  
  107. MemOK    move.l    a5,d1            ; load File
  108.     move.l    #MODE_OLDFILE,d2
  109.     CALLDOS Open
  110.     move.l    d0,d6
  111.     bne.s    OpOK
  112.     bsr.s    FreeM
  113.     bra.s    ErExit
  114. OpOK    move.l    d0,d1
  115.     move.l    a4,d2
  116.     move.l    d7,d3
  117.     CALLSYS Read
  118.     cmp.l    d7,d0
  119.     beq.s    ReadOK
  120.     CALLSYS IoErr
  121.     move.l    d0,d5
  122.     bsr.s    CloseF
  123.     move.l    d5,d0
  124.     bra    Out
  125. ReadOK    move.l    d6,d1
  126.     CALLSYS Close
  127.  
  128.     bsr.s    UnLck            ; unlock file
  129.  
  130.     movea.l a4,a0            ; returned values
  131.     move.l    d7,d1
  132.     moveq.l #RETURN_OK,d0
  133.     bra    Out
  134.  
  135.  
  136. *------ Error procedure
  137. CloseF    move.l    d6,d1            ; close File
  138.     CALLDOS Close
  139. FreeM    movea.l a4,a1            ; free memory
  140.     move.l    d7,d0
  141.     CALLEXE FreeMem
  142. UnLck    move.l    a3,d1            ; unlock File
  143.     CALLDOS UnLock
  144.     rts
  145.  
  146.  
  147. ********************************************************************************
  148.  
  149.     section data,BSS
  150.  
  151. *------ BSSfield
  152. MyLockInfo    ds.b    fib_SIZEOF
  153.     END
  154.